const express = require('express');
const axios = require('axios');
const cors = require('cors');
const app = express();

// 在 server.js 中添加一个测试接口（放在其他接口前面）
app.get('/test', (req, res) => {
  res.send('服务器正常运行！');
});
// 中间件配置：允许跨域 + 解析表单数据
app.use(cors()); // 解决跨域问题
app.use(express.urlencoded({ extended: true })); // 解析 x-www-form-urlencoded 格式

// 萤石云API地址配置
const YS7_API_BASE = 'https://open.ys7.com';
const CAPTURE_API = '/api/lapp/device/capture'; // 抓图接口路径

// 代理接口：接收前端请求并转发到萤石云
app.post('/api/ys7/capture', async (req, res) => {
  try {
    // 1. 从前端请求中获取参数
    const { accessToken, deviceSerial, channelNo = 1 } = req.body;

    // 2. 验证必填参数
    if (!accessToken || !deviceSerial) {
      return res.status(400).json({
        code: 400,
        message: 'accessToken和deviceSerial为必填参数'
      });
    }

    // 3. 构建转发给萤石云的请求参数
    const formData = new URLSearchParams();
    formData.append('accessToken', accessToken);
    formData.append('deviceSerial', deviceSerial);
    formData.append('channelNo', channelNo);

    // 4. 转发请求到萤石云API
    const response = await axios.post(
      `${YS7_API_BASE}${CAPTURE_API}`,
      formData.toString(),
      {
        headers: {
          'Content-Type': 'application/x-www-form-urlencoded',
          'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/91.0.4472.124'
        },
        timeout: 10000 // 10秒超时
      }
    );

    // 5. 将萤石云的响应返回给前端
    res.json(response.data);

  } catch (error) {
    // 错误处理
    console.error('代理请求失败:', error);

    if (error.response) {
      // 萤石云返回的错误（如权限问题、设备不存在）
      res.status(error.response.status).json({
        code: error.response.data.code || error.response.status,
        message: error.response.data.msg || '萤石云API返回错误'
      });
    } else if (error.request) {
      // 请求发送成功但无响应（如网络超时）
      res.status(504).json({ code: 504, message: '请求萤石云超时' });
    } else {
      // 代理服务器自身错误（如参数处理失败）
      res.status(500).json({ code: 500, message: `代理错误: ${error.message}` });
    }
  }
});

// 启动服务器
const PORT = 3000; // 端口号，可修改
app.listen(PORT, () => {
  console.log(`代理服务器已启动：http://localhost:${PORT}`);
  console.log(`代理接口：POST http://localhost:${PORT}/api/ys7/capture`);
});